from flask_wtf import Form
# 登录表单类
# 导入需要使用的类
from sqlalchemy import or_, and_
from wtforms import StringField, PasswordField, SubmitField, RadioField, SelectField,BooleanField
from wtforms.validators import length, DataRequired, Regexp, ValidationError

from user.models import User


class LoginForm(Form):
    username = StringField(
        label='用户名',
        validators=[
            length(min=6, max=16, message='用户名必须在6-16个字符之间'),
            DataRequired('该字段不能为空')
    ])
    # 密码
    password = PasswordField(
        label='密码',
        validators=[
            length(min=3, max=16,message='密码在3-16位之间'),
            DataRequired('该字段不能为空'),
            Regexp(regex=r'[0-9A-Za-z_]{3,16}', message='密码不能包含除数字、字母和下划线以为的字符')
    ])


    # #提交
    submit = SubmitField(label='登录')

    # 自定义检验器
    # 必须是validate开头，validate后面跟要检验的字段
    #检测用户名
    def validate_username(self, field):
        # self表示的是表单对象
        # field表示的是要检验的属性字段
        print(field)
        # 获取字段中的数据值
        print(field.data)
        # 检验用户名是否存在
        user = User.query.filter(or_
            (User.uname == field.data,
             User.uphone == field.data)
        ).first()
        if not user:
            # 抛出错误信息
            raise ValidationError('用户名不存在,请先注册！')
    #检验密码
    def validate_password(self, field):
        # self表示的是表单对象
        # field表示的是要检验的属性字段
        print(field)
        # 获取字段中的数据值
        print(field.data)
        # 检验用户名是否存在
        user = User.query.filter(User.upsw == field.data).first()
        if not user:
            # 抛出错误信息
            raise ValidationError('密码错误')

